package org.wtframework.platform.server.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * <B>类描述：</B> （时间工具类） <br/><br/>
 * <B>作者：</B> 梁卓文 <br/><br/>
 * <B>创建日期：</B> 2013-5-29 下午4:36:00 
 *
 */
public class DateUtils {
	
	/**
	 * 取得某时间前后几小时的时间，i为正数则代表时间较后的
	 * */
	public static Date getDate(Date date, int i) {
		
		if(date == null)  {
			date = new Date();
		}
				
		return new Date(date.getTime() + (i * 3600000));
	}
	
	/**
	 * 
	 * <B>方法描述：</B>（字符串转换Date） <br/>
	 *
	 * <B>作者：	 </B> 梁卓文 <br/>
	 * @param dateStr
	 * @return
	 */
	public static Date getDate(String dateStr) {
		if (null == dateStr || "".equals(dateStr)) {
			return null;
		}
		
		dateStr = dateStr.trim();
		
		String[] dateTimeReg = {
					 "\\s*\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}\\s*", 
					 "\\s*\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}\\s*",
					 "\\s*\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}\\s*",
					 "\\s*\\d{1,4}-\\d{1,2}-\\d{1,2}\\s*",
					 "\\s*\\d{1,4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}\\s*", 
					 "\\s*\\d{1,4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2}\\s*",
					 "\\s*\\d{1,4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}\\s*",
					 "\\s*\\d{1,4}/\\d{1,2}/\\d{1,2}\\s*"};
		
		
		DateFormat[] dateFormat = {
					new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
					new SimpleDateFormat("yyyy-MM-dd HH:mm"),
					new SimpleDateFormat("yyyy-MM-dd HH"),
					new SimpleDateFormat("yyyy-MM-dd"),
					new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"),
					new SimpleDateFormat("yyyy/MM/dd HH:mm"),
					new SimpleDateFormat("yyyy/MM/dd HH"),
					new SimpleDateFormat("yyyy/MM/dd"),
		};
		
		Pattern pattern = null;
		int i=0;
		for (; i<dateTimeReg.length; i++) {
			
			pattern = Pattern.compile(dateTimeReg[i]);
			Matcher mat = pattern.matcher(dateStr);  
			boolean isMatch = mat.find();
			if (isMatch)
				break;
		}
		
		Date date = null;
		
		if (i < dateTimeReg.length) {
			try {
				date = dateFormat[i].parse(dateStr);
			} catch (ParseException e) {
				date = null;
			}
		}
		
		return date;
	}
	
	/**
	* 字符串转换成日期
	* @param str
	* @return date
	*/
	public static Date StrToDate(String str) {
	  
	   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	   Date date = null;
	   try {
	    date = format.parse(str);
	   } catch (ParseException e) {
	    e.printStackTrace();
	   }
	   return date;
	}

	/**
	 * 
	 * <B>方法描述：</B>（取出当前月的第一日） <br/>
	 *
	 * <B>作者：	 </B> 梁卓文  <br/>
	 * @return
	 */
	public static Date getFirstDate() {
		
		Calendar cal = Calendar.getInstance();

		// 当前月的第一天
		cal.set(GregorianCalendar.DAY_OF_MONTH, 1);
		Date beginTime = cal.getTime();

		return beginTime;
	}
}
